/**
 * 创建并管理 BPMN 相关状态的小型仓库。
 * 使用 Pinia 定义了一个名为 'bpmn' 的状态管理仓库，包含状态、操作方法和持久化配置。
 *
 * @returns {object} 返回一个 Pinia Store 实例，包含以下属性和方法：
 * - state: 包含 `processKey` 字段，用于存储 BPMN 流程定义 ID。
 * - actions: 提供 `setProcessKey` 方法，用于设置 `processKey` 的值。
 * - persist: 配置持久化存储策略，支持 `sessionStorage` 和 `localStorage`。
 */
import type { BpmnState } from './types/bpmnStoreType'

// 引入 Pinia 的 defineStore 方法，用于创建状态管理仓库
import { defineStore } from 'pinia'

const useBPMNStore = defineStore('bpmn', {
  // 定义仓库的初始状态
  state: (): BpmnState => {
    return {
      // 存储 BPMN 流程定义 KEY，初始值为空字符串
      processKey: '',
    }
  },
  actions: {
    /**
     * 设置 BPMN 流程定义 KEY。
     *
     * @param {string} processKey - 新的 BPMN 流程定义 KEY。
     */
    setProcessKey(processKey: string) {
      this.processKey = processKey
    },
  },
  getters: {
    // 当前未定义任何 getter 方法
  },
  // 配置持久化存储策略
  persist: [
    // 使用 sessionStorage 进行持久化，但不持久化任何字段
    { storage: sessionStorage, pick: [] },
    // 使用 localStorage 持久化，仅持久化 `processKey` 字段
    { storage: localStorage, pick: ['processKey'] },
  ],
})

// 对外暴露 BPMN 状态管理仓库
export default useBPMNStore
